#ifndef REDIS_H
#define REDIS_H
#include <hiredis/hiredis.h>
#include <thread>
#include <functional>
#include <string>
using namespace std;
class Redis
{
public:
    Redis();
    ~Redis();

    // 连接redis服务器
    bool connect();
    // 向redis指定的通道发布信息
    bool publish(int channel, string message);
    // 向redis指定的subscribe订阅消息
    bool subscribe(int channel);
    // 向redis指定的通道unsubscribe取消订阅消息
    bool unsubscribe(int channel);
    // 在独立线程中接收订阅通道的消息
    void observer_channel_message();
    // 初始化向业务层上报通道消息的回调对象
    void init_notify_handler(function<void(int, string)> fn);

private:
    // hiredis同步上下文，负责publich消息
    redisContext *_publish_context;
    // hiredis同步上下文，负责subscribe消息
    redisContext *_subscribe_context;

    // 回调函数对象，接收订阅的消息，给service层上报
    function<void(int, string)> _notify_message_handler;
};
#endif